package client;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import DTO.VendeurDTO;


/**
 * Classe décrivant la fenêtre pour se créer un compte.
 * 
 * @author Julien Dubois
 * @version 1.0 (Mai 2012)
 */
@SuppressWarnings("serial")
public class ClientCreerUnCompte extends JFrame implements ActionListener, WindowListener
{
	//DECLARATION DES VARIABLES DE LA CLASSE 
	
	/**
	 * Panel général de fond.
	 */
	private JPanel grandPanel = new JPanel();
	
	/**
	 * Panel principal contenant nos éléments.
	 */
	private JPanel panel;
	
	/**
	 * Label's de la fenêtre.
	 */
	private JLabel erreurRemplissageFormulaire1, erreurRemplissageFormulaire2, erreurRemplissageFormulaire3, jlabel0, jlabel1, labelNom, labelPrenom, labelLogin, 
						labelPassword, labelTelephone, labelMail  ;

	/**
	 * TextField's de la fenêtre.
	 */
	private JTextField taNom, taPrenom, taLogin, taTelephone, taMail ;
	private JPasswordField taPassword ;
	
	/**
	 * Bouton's de la fenêtre.
	 */
	private JButton btnCreer, btnAnnuler ; 
	
	/**
	 * Instance du vendeur courant.
	 */
	private VendeurDTO vendeur ;
	

	/**
	 * Booleen de notre fenêtre.
	 */
	//le booleen quitter sert à assurer proprement la fermeture de la connexion avec le serveur. 
	private boolean quitter = true;
	

	
	//CONSTRUCTEUR DE LA FENETRE.
	
	/**
	 * Constructeur par defaut.
	 */
	public ClientCreerUnCompte()
	{
		/*
		 * Va nous pemettre d'utiliser this.dispose pour disposer d'un fenêtre quand on en a plus besoin (pour la fermer)
		 */
		this.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent arg0)
			{
				if(quitter)
				{
					ClientCommunication.getInstance().fermerConnexion();
					System.err.println("mdr de lol");
				}
			}
		});
		
		this.setTitle("Petites Annonces - S'inscrire");
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setVisible(true);
		this.setLocationRelativeTo(null);

		//on définit la taille de la fenêtre
		//600x660 pour respecter au mieux la taille de l'image d'accueil.
		this.setSize(600,660);

		
		//On n'empêche le redimensionnement.
		this.setResizable(false);
		
		
		//On colore le panel dans un gris sympathique et soyeux.
		grandPanel.setBackground(Color.LIGHT_GRAY);
		this.setContentPane(grandPanel);
		
		
		//PERSONNALISATION DE LA FENETRE A PARTIR DICI
		
		
		//GridLayout pour agencer nos éléments.
		GridLayout gridLayout = new GridLayout(12, 2, 3, 20);
		

		//Association Layout <-> Panel + CENTER + couleur.
		panel = new JPanel();
		panel.setLayout(gridLayout);
		this.getContentPane().add(panel, BorderLayout.CENTER);
		panel.setBackground(Color.LIGHT_GRAY);
		
		
		
		// ON DISPOSE DES ELEMENTS DE NOTRE FENETRE DANS panel
		
		//Label d'instruction (partie 1/2)
		jlabel0 = new JLabel();
		jlabel0.setText("Bonjour, veuilez remplir tous les champs situés");
		panel.add(jlabel0);
		
		
		//Label d'instruction (partie 2/2)		
		jlabel1 = new JLabel();
		jlabel1.setText("ci dessous :");
		jlabel1.setPreferredSize(new Dimension(0, 0));
		panel.add(jlabel1);
		
		
		//Message d'erreur.
		erreurRemplissageFormulaire1 = new JLabel("Vous n'avez pas rempli tous les champs.");
		erreurRemplissageFormulaire1.setForeground(Color.lightGray);
		panel.add(erreurRemplissageFormulaire1);
		
		//Message d'erreur.
		erreurRemplissageFormulaire2 = new JLabel("Veuillez recommencer");
		erreurRemplissageFormulaire2.setForeground(Color.LIGHT_GRAY);
		panel.add(erreurRemplissageFormulaire2);
		
		
		//Message d'erreur.
		erreurRemplissageFormulaire3 = new JLabel("Login deja existant ! Veuillez en changer, svp !");
		erreurRemplissageFormulaire3.setForeground(Color.LIGHT_GRAY);
		panel.add(erreurRemplissageFormulaire3);
		
		
		//Espace pour agencer nos éléments.
		JLabel espacevide2 = new JLabel();
		espacevide2.setPreferredSize(new Dimension(20, 30));
		panel.add(espacevide2);
		
		
		//A partir de là on dispose tous les éléments necessaires du formulaire.
		labelNom = new JLabel(" Nom : ");
		panel.add(labelNom);
		
		taNom = new JTextField("");
		panel.add(taNom);
		
		labelPrenom = new JLabel(" Prenom : ");
		panel.add(labelPrenom);
		
		taPrenom = new JTextField("");
		panel.add(taPrenom);

		labelLogin = new JLabel(" Login : ");
		panel.add(labelLogin);
		
		taLogin = new JTextField("");
		panel.add(taLogin);
		
		labelPassword = new JLabel(" Password : ");
		panel.add(labelPassword);
		
		taPassword = new JPasswordField("");
		panel.add(taPassword);
		
		labelTelephone = new JLabel(" Telephone : ");
		panel.add(labelTelephone);
		
		taTelephone = new JTextField("");
		panel.add(taTelephone);
		
		labelMail = new JLabel(" Mail : ");
		panel.add(labelMail);
		
		taMail = new JTextField("");
		panel.add(taMail);
		
		JLabel espacevide3 = new JLabel();
		espacevide3.setPreferredSize(new Dimension(80, 30));
		panel.add(espacevide3);
		
		JLabel espacevide4 = new JLabel();
		espacevide4.setPreferredSize(new Dimension(80, 30));
		panel.add(espacevide4);
		
		JLabel espacevide5 = new JLabel();
		espacevide5.setPreferredSize(new Dimension(80, 30));
		panel.add(espacevide5);
		
		JLabel espacevide6 = new JLabel();
		espacevide6.setPreferredSize(new Dimension(80, 30));
		panel.add(espacevide6);
		
		//Deux boutons placés en bas de page.
		btnCreer = new JButton("Creer");
		panel.add(btnCreer);
		btnCreer .addActionListener(this);
		
		btnAnnuler = new JButton("Annuler");
		panel.add(btnAnnuler);
		btnAnnuler.addActionListener(this);
	}

	
	// ACTIONS SUR LES BOUTONS
	
	public void actionPerformed(ActionEvent e)
	{
		Object event = e.getSource();
		
		//Clic sur le bouton "Annuler".
		if (event == btnAnnuler)
		{
			quitter = false;
			ClientCommunication.getInstance().creerFenetre(grandPanel, "fenetreAccueil");
			this.dispose();
		}
		
		//Clique sur le bouton "Créer".
		if (event == btnCreer)
		{
			// On va vérifier l'adresse mail et le téléphone du client.
			if(ClientCommunication.verifierTelephone(taTelephone.getText()))
			{
				if(ClientCommunication.verifierEmail(taMail.getText()))
				{	
					
					//si le champ est vide.
					if ( taNom.getText().equals("") || taPrenom.getText().equals("") || taLogin.getText().equals("") || new String(taPassword.getPassword()).equals("") || taTelephone.getText().equals("") || taMail.getText().equals(""))
					{
						erreurRemplissageFormulaire1.setText("Vous n'avez pas rempli tous les champs.");
						erreurRemplissageFormulaire1.setForeground(Color.RED);
						erreurRemplissageFormulaire2.setForeground(Color.RED);
						//On remet le message d'erreur du login en gris_clair au cas ou l'utilisateur aurait rempli un mauvais login en premier.
						erreurRemplissageFormulaire3.setForeground(Color.LIGHT_GRAY);
					}
					else 
					{
						// on récupère les informations concernant le nouveau vendeur.
						vendeur = new VendeurDTO(0, taNom.getText(), taPrenom.getText(), taLogin.getText(), new String(taPassword.getPassword()), taTelephone.getText(), taMail.getText());
						
						
						//Si le login est deja pris
						if (ClientCommunication.getInstance().ajouterVendeur(vendeur) == -1 )
						{
							erreurRemplissageFormulaire3.setForeground(Color.RED);
							//pareil on remet en gris 
							erreurRemplissageFormulaire1.setForeground(Color.LIGHT_GRAY);
							erreurRemplissageFormulaire2.setForeground(Color.LIGHT_GRAY);
						}
						else
						{
							
							//sinon on ajoute le contact à la BDD.
							//on set le vendeur stocké avec les infos qui viennent de nous être données.
							vendeur.setId(ClientCommunication.getInstance().connexionVendeur(vendeur.getLogin(), vendeur.getMot_de_passe()));
							ClientCommunication.getInstance().setVendeurStocke(vendeur);
							
							quitter = false;
							ClientCommunication.getInstance().creerFenetre(grandPanel, "fenetreUneFoisConnecte");
							this.dispose();
						}
					}
				}
				else
				{
					erreurRemplissageFormulaire1.setText("L'adresse email n'est pas valide.");
					erreurRemplissageFormulaire1.setForeground(Color.RED);
					erreurRemplissageFormulaire2.setForeground(Color.RED);
				}
			}
			else
			{
				erreurRemplissageFormulaire1.setText("Le numéro de téléphone n'est pas valide.");
				erreurRemplissageFormulaire1.setForeground(Color.RED);
				erreurRemplissageFormulaire2.setForeground(Color.RED);
			}
		}
		
		
		
	}
	
	//Méthodes implémentées de WindowListener, on ne les utilisent pas.

	@Override
	public void windowActivated(WindowEvent e)
	{
		
	}

	@Override
	public void windowClosed(WindowEvent e)
	{
		
	}

	@Override
	public void windowClosing(WindowEvent e)
	{
		
	}

	@Override
	public void windowDeactivated(WindowEvent e)
	{
		
	}

	@Override
	public void windowDeiconified(WindowEvent e)
	{
		
	}

	@Override
	public void windowIconified(WindowEvent e)
	{
		
	}

	@Override
	public void windowOpened(WindowEvent e)
	{
		
	}

}
